From 152eabbaba851b96b23781e2db2a180ff5521ebc Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sat, 22 Jun 2019 02:35:52 +0000 Subject: [PATCH] widget actions: Add an explicit state type Make the state type part of the API for installing stateful widget actions. That lets us introspect it. Update all callers. --- gtk/gtkactionmuxer.c | 6 ++---- gtk/gtkactionmuxerprivate.h | 1 + gtk/gtkcolorchooserwidget.c | 4 ++-- gtk/gtktext.c | 2 +- gtk/gtkwidget.c | 11 +++++++---- gtk/gtkwidget.h | 1 + 6 files changed, 14 insertions(+), 11 deletions(-) diff --git a/gtk/gtkactionmuxer.c b/gtk/gtkactionmuxer.c index 33951ce463..515f93f6db 100644 --- a/gtk/gtkactionmuxer.c +++ b/gtk/gtkactionmuxer.c @@ -446,11 +446,11 @@ gtk_action_muxer_query_action (GActionGroup *action_group, *enabled = muxer->widget_actions_enabled[i]; if (parameter_type) *parameter_type = action->parameter_type; + if (state_type) + *state_type = action->state_type; if (state_hint) *state_hint = NULL; - if (state_type) - *state_type = NULL; if (state) *state = NULL; @@ -460,8 +460,6 @@ gtk_action_muxer_query_action (GActionGroup *action_group, s = g_variant_ref_sink (action->get_state (muxer->widget, action->name)); - if (state_type) - *state_type = g_variant_get_type (s); if (state) *state = g_variant_ref (s); diff --git a/gtk/gtkactionmuxerprivate.h b/gtk/gtkactionmuxerprivate.h index 325c1f817a..5a1218d84a 100644 --- a/gtk/gtkactionmuxerprivate.h +++ b/gtk/gtkactionmuxerprivate.h @@ -35,6 +35,7 @@ typedef struct { char *name; GVariantType *parameter_type; + GVariantType *state_type; GtkWidgetActionActivateFunc activate; GtkWidgetActionSetStateFunc set_state; diff --git a/gtk/gtkcolorchooserwidget.c b/gtk/gtkcolorchooserwidget.c index 7c29976c01..9830b20417 100644 --- a/gtk/gtkcolorchooserwidget.c +++ b/gtk/gtkcolorchooserwidget.c @@ -715,10 +715,10 @@ gtk_color_chooser_widget_class_init (GtkColorChooserWidgetClass *class) gtk_widget_class_install_stateful_action (GTK_WIDGET_CLASS (class), "color.select", gtk_color_chooser_widget_activate_color_select, - "(dddd)", NULL, NULL); + "(dddd)", NULL, NULL, NULL); gtk_widget_class_install_stateful_action (GTK_WIDGET_CLASS (class), "color.customize", gtk_color_chooser_widget_activate_color_customize, - "(dddd)", NULL, NULL); + "(dddd)", NULL, NULL, NULL); } /* GtkColorChooser implementation {{{1 */ diff --git a/gtk/gtktext.c b/gtk/gtktext.c index 7097a9eab0..370adda586 100644 --- a/gtk/gtktext.c +++ b/gtk/gtktext.c @@ -1377,7 +1377,7 @@ gtk_text_class_init (GtkTextClass *class) gtk_text_activate_misc_insert_emoji); gtk_widget_class_install_stateful_action (widget_class, "misc.toggle-visibility", gtk_text_activate_misc_toggle_visibility, - NULL, + NULL, "b", gtk_text_set_misc_toggle_visibility, gtk_text_get_misc_toggle_visibility); } diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c index f2a8c9710c..4b093bfaa8 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -13449,7 +13449,7 @@ gtk_widget_class_install_action (GtkWidgetClass *widget_class, GtkWidgetActionActivateFunc activate) { gtk_widget_class_install_stateful_action (widget_class, action_name, activate, - NULL, NULL, NULL); + NULL, NULL, NULL, NULL); } /* @@ -13458,9 +13458,10 @@ gtk_widget_class_install_action (GtkWidgetClass *widget_class, * @action_name: a prefixed action name, such as "clipboard.paste" * @activate: callback to use when the action is activated * @parameter_type: (allow-none): the parameter type, or %NULL - * @query: (allow-none): callback to use when the action properties - are queried, or %NULL for always-enabled stateless actions - * @query_state: (allow-none): callback to use when the action state + * @state_type: (allow-none): the state type, or %NULL + * @set_state: (allow-none): callback to use when the action state + is set, or %NULL for stateless actions + * @get_state: (allow-none): callback to use when the action state is queried, or %NULL for stateless actions * * This should be called at class initialization time to specify @@ -13474,6 +13475,7 @@ gtk_widget_class_install_stateful_action (GtkWidgetClass *widget_cl const char *action_name, GtkWidgetActionActivateFunc activate, const char *parameter_type, + const char *state_type, GtkWidgetActionSetStateFunc set_state, GtkWidgetActionGetStateFunc get_state) { @@ -13504,6 +13506,7 @@ gtk_widget_class_install_stateful_action (GtkWidgetClass *widget_cl action->name = g_strdup (action_name); action->activate = activate; action->parameter_type = parameter_type ? g_variant_type_new (parameter_type) : NULL; + action->state_type = state_type ? g_variant_type_new (state_type) : NULL; action->set_state = set_state; action->get_state = get_state; diff --git a/gtk/gtkwidget.h b/gtk/gtkwidget.h index 73e92ac1cb..d52dff446a 100644 --- a/gtk/gtkwidget.h +++ b/gtk/gtkwidget.h @@ -1080,6 +1080,7 @@ void gtk_widget_class_install_stateful_action (GtkWidgetClass const char *action_name, GtkWidgetActionActivateFunc activate, const char *parameter_type, + const char *state_type, GtkWidgetActionSetStateFunc set_state, GtkWidgetActionGetStateFunc get_state); -- 2.30.2